import re
import subprocess


def sync_requirements_to_poetry():
    # 1. 读取requirements.txt中的依赖（过滤注释和空行，提取包名和版本）
    deps = []
    with open("requirements.txt", "r", encoding="utf-8") as f:
        for line in f:
            line = line.strip()
            # 跳过注释、空行和URL形式的依赖（如git+https://...）
            if not line or line.startswith("#") or "git+" in line:
                continue
            # 匹配 "包名==版本号" 格式（兼容带额外约束的行，如 requests==2.31.0; python_version >= "3.7"）
            match = re.match(r"^([a-zA-Z0-9_-]+)==([0-9a-zA-Z.+-]+)", line)
            if match:
                pkg_name, pkg_version = match.groups()
                deps.append(f"{pkg_name}=={pkg_version}")  # 构造 "包名==版本号"

    if not deps:
        print("未从requirements.txt中找到有效依赖，请检查文件内容！")
        return

    # 2. 批量调用Poetry添加依赖（去掉--no-root，因为poetry add不支持该选项）
    print(f"共发现{len(deps)}个依赖，开始同步到Poetry...")
    try:
        subprocess.run(
            ["poetry", "add"] + deps,  # 移除--no-root选项
            check=True,
            text=True,
            encoding="utf-8"
        )
        print("✅ 所有依赖已成功同步到Poetry！")
        print("请检查 pyproject.toml 和 poetry.lock 文件，确认版本已更新。")
    except subprocess.CalledProcessError as e:
        print(f"❌ 同步失败！错误信息：\n{e.stderr}")
    except FileNotFoundError:
        print("❌ 未找到Poetry命令，请确保Poetry已正确安装并添加到系统环境变量！")

if __name__ == "__main__":
    sync_requirements_to_poetry()